home *** CD-ROM | disk | FTP | other *** search
Wrap
property appearWhen, pixelateDuration, horizontalPixels, verticalPixels, minimumDim, spriteNum, mySprite, myStartFrame, myEndFrame, myOriginalMember, myOriginalImage, myTransitionMember, myAlphaMask, myPixelatedImage, mymultipliers on beginSprite me me.convertAppearance() mySprite = sprite(spriteNum) myOriginalMember = mySprite.member case myOriginalMember.type of #bitmap: myOriginalImage = image(myOriginalMember.width, myOriginalMember.height, myOriginalMember.depth) myOriginalImage = myOriginalMember.image case myOriginalMember.depth of 32: if myOriginalMember.useAlpha then myOriginalAlpha = myOriginalMember.image.extractAlpha() end if end case #text, #vectorShape, #flash: if myOriginalMember.type = #text then mySprite.rect = mySprite.rect end if myOriginalImage = image(myOriginalMember.width, myOriginalMember.height, 32) if mySprite.ink = 0 then case myOriginalMember.type of #text, #flash: myOriginalImage.fill(myOriginalImage.rect, myOriginalMember.bgColor) #vectorShape: myOriginalImage.fill(myOriginalImage.rect, myOriginalMember.backgroundColor) end case myOriginalImage.copyPixels(myOriginalMember.image, myOriginalMember.rect, myOriginalImage.rect, [#maskImage: myOriginalMember.image.extractAlpha()]) else myOriginalImage = myOriginalMember.image end if end case case appearWhen of #start: myStartFrame = mySprite.startFrame myEndFrame = myStartFrame + pixelateDuration - 1 #end: myEndFrame = mySprite.endFrame myStartFrame = myEndFrame - pixelateDuration + 1 end case myTransitionMember = new(#bitmap, castLib(mySprite.castLibNum)) myTransitionMember.image = image(myOriginalMember.width, myOriginalMember.height, 32, 8) myTransitionMember.regPoint = myOriginalMember.regPoint myTransitionMember.image.copyPixels(myOriginalImage, myOriginalMember.rect, myOriginalMember.rect) if myOriginalImage.depth = 32 then myTransitionMember.useAlpha = 1 end if myPixelatedImage = image(myOriginalMember.width, myOriginalMember.height, myOriginalImage.depth, 0) mymultipliers = me.generatepixelmults() end on endSprite me mySprite.member = myOriginalMember erase(myTransitionMember) end on prepareFrame me if (the frame >= myStartFrame) and (the frame <= myEndFrame) then elapsedFrames = the frame - myStartFrame + 1 if appearWhen = #end then elapsedFrames = pixelateDuration - elapsedFrames end if currentHorzPixels = integer(minimumDim * power(mymultipliers.horz, elapsedFrames)) currentVertPixels = integer(minimumDim * power(mymultipliers.vert, elapsedFrames)) memberRect = myTransitionMember.rect myPixelatedImage.fill(myPixelatedImage.rect, 0) pixelatedRect = rect(0, 0, currentHorzPixels, currentVertPixels) myPixelatedImage.copyPixels(myOriginalImage, pixelatedRect, memberRect) myTransitionMember.image.copyPixels(myPixelatedImage, memberRect, pixelatedRect) mySprite.member = myTransitionMember else mySprite.member = myOriginalMember end if end on convertAppearance me case appearWhen of "beginning of sprite": appearWhen = #start "end of sprite": appearWhen = #end end case end on generatepixelmults me multipliers = [:] horzfactor = myOriginalMember.width / minimumDim / horizontalPixels vertfactor = myOriginalMember.height / minimumDim / verticalPixels multipliers[#horz] = power(horzfactor, 1.0 / (pixelateDuration - 1)) multipliers[#vert] = power(vertfactor, 1.0 / (pixelateDuration - 1)) return multipliers end on isOKToAttach me, aSpriteType, aSpriteNum isOK = 0 case aSpriteType of #graphic: case sprite(aSpriteNum).member.type of #bitmap, #text, #flash, #vectorShape: isOK = 1 end case end case return isOK end on getPropertyDescriptionList me props = [:] props[#appearWhen] = [#comment: "When transition appears:", #format: #string, #default: "beginning of sprite", #range: ["beginning of sprite", "end of sprite"]] firstFrame = sprite(the currentSpriteNum).startFrame endFrame = sprite(the currentSpriteNum).endFrame maxLength = endFrame - firstFrame + 1 maxWidth = sprite(the currentSpriteNum).member.width maxHeight = sprite(the currentSpriteNum).member.height maxDim = max(2, min(maxWidth, maxHeight) / 2) props[#pixelateDuration] = [#comment: "Duration:", #format: #integer, #default: 10, #range: [#min: 1, #max: maxLength]] props[#horizontalPixels] = [#comment: "Lowest Resolution (horizontal):", #format: #integer, #default: 3, #range: [#min: 2, #max: maxWidth]] props[#verticalPixels] = [#comment: "Lowest Resolution (vertical):", #format: #integer, #default: 3, #range: [#min: 2, #max: maxHeight]] props[#minimumDim] = [#comment: "Minimum pixel dimension:", #format: #integer, #default: 4, #range: [#min: 2, #max: maxDim]] return props end on getBehaviorTooltip return "Creates a transition where the sprite resolves from or into a grid of low-resolution pixels." end on getBehaviorDescription return "PIXELATE TRANSITION" & RETURN & RETURN & "Drop this behavior onto a sprite to create an animation where the sprite transforms from a low-resolution to high-resolution image." & RETURN & RETURN & "Select when the transition will take effect. " & "The duration controls the number of frames over which the transition occurs. " & "The minimum number of pixels in both directions can also be controlled." & RETURN & RETURN & "When this transition is used during authoring, and the movie is stopped the cast member it uses for the transition effect may not be erased." & RETURN & RETURN & "PERMITTED MEMBER TYPES:" & RETURN & "bitmaps and text" & RETURN & RETURN & "PARAMETERS:" & RETURN & "* When transition appears - controls whether sprite moves on or off the stage" & RETURN & "* Duration - number of frames for the transition to take place" & RETURN & "* Horizontal Pixels - number of pixels at lowest resolution" & RETURN & "* Vertical Pixels - number of pixels at lowest resolution" & RETURN & "* Minimum Pixel Dimension - smallest edge length for a pixel during transition" end